package gomz.pres;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Diese Klasse erstellt die UI fuer die Kategorieverwaltung.
 * 
 * @author Dilji
 */
public class GUICategory extends JDialog{
		
	//********************************************************************************
	// Variablen
	// ********************************************************************************
	//GUI Elemente
	private JLabel lbCategory;
	private JTextField tfCategory;
	private JButton btSave;
	private JButton btCancel;
	//Vater Fenster
	private JFrame pWindow;
	//Bool ob gespeichert wurde
	private Boolean isSaved;
	
	/**
	 * Konstruktor um eine Kategorie zu editieren
	 * 
	 * @param pWindow Vaterfenster
	 * @param catName Kategoriename, der editiert werden soll
	 */
	public GUICategory(JFrame pWindow, String catName){
		//Titel setzen und erzwingen, dass sie im Vordergrund bleiben
		super(pWindow, "Kategorie editieren", ModalityType.APPLICATION_MODAL);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setPWindow(pWindow);
		setIsSaved(false);
		
		//GUI erstellen
		drawGUI();
		getTfCategory().setText(catName);
	}

	/**
	 * Konstruktor um eine neue Kategorie zu erfassen
	 * 
	 * @param pWindow Vaterfenster
	 */
	public GUICategory(JFrame pWindow){
		//Titel setzen und erzwingen, dass sie im Vordergrund bleiben
		super(pWindow, "Kategorie hinzuf\u00fcgen", ModalityType.APPLICATION_MODAL);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setPWindow(pWindow);
		setIsSaved(false);
		
		//GUI erstellen
		drawGUI();
	}
	
	/**
	 * GUI-Elemente erstellen und platzieren
	 */
	private void drawGUI(){
		//GUI-Elemente erstellen
		btSave = new JButton("Speichern");
		btSave.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				setIsSaved(true);
				dispose();
			}
		});
		this.getRootPane().setDefaultButton(btSave);
		
		btCancel = new JButton("Abbrechen");
		btCancel.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		
		lbCategory = new JLabel("Kategoriename:");
		tfCategory = new JTextField();
		
		// Button groesse
		btSave.setPreferredSize(new Dimension(GUIMain.getBtWidth(), GUIMain.getBtHeight()));
		btSave.setMaximumSize(new Dimension(GUIMain.getBtWidth(), GUIMain.getBtHeight()));
		btCancel.setPreferredSize(new Dimension(GUIMain.getBtWidth(), GUIMain.getBtHeight()));
		btCancel.setMaximumSize(new Dimension(GUIMain.getBtWidth(), GUIMain.getBtHeight()));
		
		tfCategory.setPreferredSize(new Dimension(200, GUIMain.getTfheight()));
		tfCategory.setMaximumSize(new Dimension(200, GUIMain.getTfheight()));
		
		//Layout hinzufuegen
		JPanel plMain = new JPanel();
		plMain.setLayout(new GridBagLayout());
		GridBagConstraints cat = new GridBagConstraints();
		cat.fill = GridBagConstraints.HORIZONTAL; // Zellen in x-Achse ausfuellen
		cat.anchor = GridBagConstraints.NORTHWEST; // Ausrichtung oben

		cat.insets = new Insets(GUIMain.getAbstand()/3, GUIMain.getAbstand(), 0, GUIMain.getAbstand());
		cat.gridx = 0; // Spalte 1
		cat.gridy = 0; // Zeile 1
		cat.gridwidth = 2;
		plMain.add(lbCategory, cat); // lbCategory
		cat.gridx = 1; // Spalte 2
		cat.gridy = 0; // Zeile 1
		cat.gridwidth = 1;
		// plMain.add(, cat); // Leer

		cat.insets = new Insets(GUIMain.getAbstand(), GUIMain.getAbstand(), 0, GUIMain.getAbstand());
		cat.gridx = 0; // Spalte 1
		cat.gridy = 1; // Zeile 2
		cat.gridwidth = 2;
		plMain.add(tfCategory, cat); // tfCategory
		cat.gridx = 1; // Spalte 2
		cat.gridy = 1; // Zeile 2
		cat.gridwidth = 1;
		// plMain.add(, cat); // Leer

		cat.insets = new Insets(GUIMain.getAbstand()*2, GUIMain.getAbstand(), GUIMain.getAbstand(), GUIMain.getAbstand());
		cat.gridx = 0; // Spalte 1
		cat.gridy = 2; // Zeile 3
		plMain.add(btSave, cat); // btSave
		cat.gridx = 1; // Spalte 2
		cat.gridy = 2; // Zeile 3
		plMain.add(btCancel, cat); // btCancel
		
		this.add(plMain);
		this.setLocationRelativeTo(null);
		this.setPreferredSize(new Dimension(350, 200));
		
		this.pack();
		this.setResizable(false);
	}
	
	/**
	 * Diese Methode zeigt den Dialog an
	 * @return Boolean ob gespeichrt wurde oder ob das Fenster ohne speichern geschlossen wurde
	 */
	public boolean showDialog(){
		this.setVisible(true);
		return (getIsSaved());
	}

	// ********************************************************************************
	// Getter/Setter
	// ********************************************************************************
	public JLabel getLbCategory() {
		return lbCategory;
	}

	public void setLbCategory(JLabel lbCategory) {
		this.lbCategory = lbCategory;
	}

	public JTextField getTfCategory() {
		return tfCategory;
	}

	public void setTfCategory(JTextField tfCategory) {
		this.tfCategory = tfCategory;
	}

	public JFrame getPWindow() {
		return pWindow;
	}

	public void setPWindow(JFrame pWindow) {
		this.pWindow = pWindow;
	}

	public Boolean getIsSaved() {
		return isSaved;
	}

	public void setIsSaved(Boolean isSaved) {
		this.isSaved = isSaved;
	}
}
